”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 掌握响应式布局:使用 CSS 网格实现复杂设计

掌握响应式布局:使用 CSS 网格实现复杂设计

发布于2024-08-09
浏览:956

创建响应式布局是 Web 开发人员面临的常见挑战。在本博客中,我们将探讨如何使用不同的 CSS 技术实现特定的响应式设计,重点关注为什么 CSS 网格是这种特定布局的最佳方法。

Responsive layout

挑战

我们需要创建一个布局,其中:

桌面视图:

  • DIV 1 和 DIV 3 垂直堆叠在左侧,各占左列的 50%。
  • DIV 2 占据右列的整个高度。

手机查看:

  • 所有三个 div 垂直堆叠。

为什么 Flexbox 存在不足

Flexbox 对于一维布局非常出色,但对于像我们这样的复杂二维布局却很困难。原因如下:

 
DIV 1
DIV 2
DIV 3
.container {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 10px;
}

.item {
    background-color: #40c4ff;
    color: white;
    padding: 20px;
    text-align: center;
    box-sizing: border-box;
}

.item:nth-child(1),
.item:nth-child(3) {
    flex: 1 1 calc(50% - 10px);
}

.item:nth-child(2) {
    flex: 1 1 50%;
}

@media (max-width: 768px) {
    .item {
        flex: 1 1 100%;
    }
}

Flexbox 的问题

在此弹性盒设置中:

  • DIV 2 无法自动调整其高度以匹配 DIV 1 和 DIV 3 的组合高度。
  • Flexbox 主要用于一维布局(行或列),而不是复杂的二维排列。

CSS 网格解决方案

CSS Grid 擅长创建二维布局,使其非常适合这一挑战。

 
DIV 1
DIV 2
DIV 3
.container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto auto;
    gap: 10px;
    padding: 10px;
}

.item {
    background-color: #40c4ff;
    color: white;
    padding: 20px;
    text-align: center;
    box-sizing: border-box;
}

.item:nth-child(1) {
    grid-column: 1 / 2;
    grid-row: 1 / 2;
}

.item:nth-child(2) {
    grid-column: 2 / 3;
    grid-row: 1 / 3;
}

.item:nth-child(3) {
    grid-column: 1 / 2;
    grid-row: 2 / 3;
}

@media (max-width: 768px) {
    .container {
        display: flex;
        flex-direction: column;
    }
    .item {
        width: 100%;
    }
}

解释

网格布局:

  • 定义一个两列两行的网格。
  • 将 DIV 1 放置在第一列第一行中。
  • 将 DIV 2 放置在第二列中,跨两行。
  • 将 DIV 3 放置在第一列和第二行中。

响应式设计:

  • 对于 768 像素或更窄的屏幕,布局切换为 Flex,垂直堆叠项目。

结论

虽然 Flexbox 非常适合简单的一维布局,但 CSS Grid 提供了更复杂的二维设计所需的功能和灵活性。通过使用 CSS Grid,我们可以轻松地以最少的代码和最大的控制实现所需的响应式布局。

请随意调整此示例以适合您自己的项目,并享受使用 CSS 网格进行响应式布局的好处!

版本声明 本文转载于:https://dev.to/jangya/mastering-responsive-layouts-achieving-complex-designs-with-css-grid-5b1p?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 驯服电子邮件野兽:我的收件箱管理人工智能之旅
    驯服电子邮件野兽:我的收件箱管理人工智能之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    编程 发布于2024-11-06
  • 为什么 Go 是智能合约开发的新竞争者
    为什么 Go 是智能合约开发的新竞争者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    编程 发布于2024-11-06
  • 如何在等待线程完成时保持 tkinter GUI 响应?
    如何在等待线程完成时保持 tkinter GUI 响应?
    等待线程完成时冻结/挂起 tkinter GUI在 Python 中使用 tkinter GUI 工具包时遇到的常见问题执行某些操作时界面冻结或挂起。这通常是由于在主事件循环中使用了阻塞操作,例如加入线程。理解 tkinter Mainlooptkinter mainloop() 是负责处理用户输入...
    编程 发布于2024-11-06
  • C 和 C++ 中条件运算符的行为有什么区别?
    C 和 C++ 中条件运算符的行为有什么区别?
    条件运算符:剖析 C 与 C 的差异在编程领域,条件运算符 (?:) 充当计算表达式并根据结果返回特定值的简洁方法。虽然此运算符在 C 和 C 中的操作类似,但出现了一个微妙的区别,可能会影响代码执行。C:对左值的限制在 C 中,条件运算符对返回左值(驻留在特定内存地址的变量)施加限制。这意味着类似...
    编程 发布于2024-11-06
  • Java中如何高效地检查字符串中是否存在某个字符?
    Java中如何高效地检查字符串中是否存在某个字符?
    高效字符串字符验证在Java中,一个常见的任务是判断某个特定字符是否出现在字符串中。虽然传统方法涉及遍历字符串,但利用 indexOf() 的有效替代方法消除了循环的需要。IndexOf() 逐个字符扫描字符串,并返回指定字符所在的第一个实例的索引出现。如果该字符不存在,则返回值 -1。考虑检查字符...
    编程 发布于2024-11-06
  • 如何使用 PHP 为图像添加水印?
    如何使用 PHP 为图像添加水印?
    使用 PHP 向图像添加水印如果您正在使用允许用户上传图像的网站,则可能需要添加这些图像的水印,以防止未经授权的使用。添加水印可确保您的徽标或品牌在每个上传的图像上都可见。以下是如何在 PHP 中实现此目的:使用 PHP 函数PHP 手册提供了使用以下函数的综合示例:imagecreatefromp...
    编程 发布于2024-11-06
  • 如何抑制 Tensorflow 调试输出?
    如何抑制 Tensorflow 调试输出?
    抑制Tensorflow调试信息Tensorflow可能会在初始化时在终端中显示调试信息,包括加载的库和发现的设备。虽然此信息对于调试目的很有用,但它也会使控制台混乱并使跟踪重要消息变得困难。要禁用此调试信息,您可以使用 os.environ 模块:import os os.environ['TF_...
    编程 发布于2024-11-06
  • 如何确定我的 MySQL 查询是否利用了索引?
    如何确定我的 MySQL 查询是否利用了索引?
    识别 MySQL 索引的性能优化 MySQL 查询时,评估索引的有效性至关重要。获取索引性能指标要确定您的查询是否使用索引,请执行以下查询:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1 ...
    编程 发布于2024-11-06
  • 如何更改 WAMP/MySQL 中错误消息的语言?
    如何更改 WAMP/MySQL 中错误消息的语言?
    WAMP/MySQL 中的语言错误许多用户都遇到过 WAMP/MySQL 中的错误未以正确的语言显示的问题。多次重新安装WAMP并搜索大量资源后,该问题仍然存在。要解决此问题,需要修改my.ini文件。修改my.ini文件找到行:# Change your locale here ! lc-mess...
    编程 发布于2024-11-06
  • Item - 返回空集合或数组而不是 null
    Item - 返回空集合或数组而不是 null
    不返回 null: 返回 null 代替空集合或数组的方法需要额外的客户端处理以避免异常。 null 问题: 客户端需要添加冗余检查(如果要检查null)。 这些检查中的遗漏可能会被忽视,从而导致错误。 返回集合或数组的方法很难实现。 反对 null 的参数: 不要担心分配空集合或数组的性能,除非...
    编程 发布于2024-11-06
  • 节点 JS || Epress js ||作者:穆尼塞卡·乌达瓦拉帕蒂
    节点 JS || Epress js ||作者:穆尼塞卡·乌达瓦拉帕蒂
    Express js 编写简单的express js应用程序 npm 初始化 npm 安装 Express const express=require('expreass'); const app=express(); app.use('/',(req,res,next)=>{ rse...
    编程 发布于2024-11-06
  • 嵌套括号可以在没有递归或平衡组的情况下匹配吗?
    嵌套括号可以在没有递归或平衡组的情况下匹配吗?
    在没有递归或平衡组的情况下匹配嵌套括号使用正则表达式匹配嵌套括号可能具有挑战性,特别是在像 Java 这样的语言中,其中递归且不支持平衡组。幸运的是,使用前向引用确实可以克服此限制。匹配外部组以下正则表达式 [1] 匹配外部组括号而不对深度施加限制:(?=\()(?:(?=.*?\((?!.*?\1...
    编程 发布于2024-11-06
  • 使用 TDD 方法论和 PostgreSQL 使用 Django 构建完整博客应用程序的指南(部分安全用户身份验证)
    使用 TDD 方法论和 PostgreSQL 使用 Django 构建完整博客应用程序的指南(部分安全用户身份验证)
    Welcome back, everyone! In the previous part, we established a secure user registration process for our Django blog application. However, after succes...
    编程 发布于2024-11-06
  • 如何编写更好的 CSS
    如何编写更好的 CSS
    为了为网站样式编写更好的CSS,您必须首先学习三件事,即响应式设计,您的代码可维护和可扩展,并且具有执行性。 响应式设计就是要确保您的网站在每种可能的屏幕尺寸上都具有完美的外观和行为。随着屏幕尺寸的不断增加,响应式设计是每个前端开发人员必须学习和掌握的基本概念。 您编写的代码必须以其他开发人员也可以...
    编程 发布于2024-11-06
  • 解锁 JavaScript 的超能力:变量的魔力
    解锁 JavaScript 的超能力:变量的魔力
    从今天开始,我们将发现一个编程的世界。 你拥有超能力的世界。是的,你没看错,超能力。如果不是超能力,那又是什么?使用 JavaScript,您可以让物体飞、移动、消失、改变颜色,并在数英里之外看到您的朋友,而这只是可能的一小部分。是的,一切都在你的屏幕上,但仍然非常令人兴奋。 像任何超级英雄一样,你...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3